/***********************************************************************************
 * 文件名： polsys_mcu.h
 * 版本： 2
 * 说明：
 * 		polsys 对接 MCU驱动支持包 的桥梁文件，polsys需要使用MCU外设驱动时只需要包含这个文
 *  件，而不用关心具体是哪个型号的MCU。使用 polsys 的用户需要使用 MCU 外设驱动包时请直接包
 *  含 polsys.h 。
 *      必须在 polsys_config.h 中设置正确的MCU型号才能使用该MCU的驱动包。在这里可以查看受
 *  支持的MCU型号的宏定义。
 * 修改记录：
 * 	2021/04/28: 初版。 刘言。
 *  2021/11/15：增加注释。刘言。
***********************************************************************************/
#ifndef _POLSYS_MCU_H_
#define _POLSYS_MCU_H_

#include <stddef.h>
#ifdef __NO_INCLUDE_PATH    // 如果有，定义在 stddef.h
#include "..\projects\prj\app\polsys_config.h"
#else
#include "polsys_config.h"
#endif


// 受支持的MCU型号的宏定义，必须在 polsys_config.h 中设置正确的MCU型号才能使用该MCU的驱动包

// 中微SC8系列8位机
#define POLSYS_MCU_SC8                  1

#define POLSYS_MCU_STM8_IAR             2

#define POLSYS_MCU_MS51XB9AE_KEIL       3

// 华大HC32系列M0+
#define POLSYS_MCU_HC32                 4

// 九齐NY8系列8位机
#define POLSYS_MCU_NY8                  5

// 芯海蓝牙SOC
#define POLSYS_MCU_CST92F25             6

#define POLSYS_MCU_KEIL_SIM_M0P         7

// 国民技术32位ARM
#define POLSYS_MCU_N32                  8

#define POLSYS_MCU_STM32                9

// 中微 32位 M0+
#define POLSYS_MCU_CMS32F0301           10

#define POLSYS_MCU_HAL_PY32             11
#define POLSYS_MCU_PY32                 12

// 包含对应的MCU驱动包头文件，宏定义检查

#ifndef POLSYS_MCU_MODEL
    #error "POLSYS_MCU_MODEL is not defined."
#else
    #if (POLSYS_MCU_MODEL == POLSYS_MCU_SC8)
        #include "mcu\SC8\mcu.h"
        #ifndef POLSYS_LITE
        #error "SC8P 系列MCU仅支持 POLSYS_LITE."
        #endif
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_STM8_IAR)
        #include "mcu\STM8_IAR\mcu.h"
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_MS51XB9AE_KEIL)
        #include "mcu\MS51XB9AE_KEIL\mcu.h"
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_HC32)
        #include "mcu\HC32\mcu.h"
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_NY8)
        #include "mcu\NY8\mcu.h"
        #ifndef POLSYS_LITE
        #error "NY8 系列MCU仅支持 POLSYS_LITE."
        #endif
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_CST92F25)
        #include "mcu\CST92F25\mcu_top.h"
        #define _POLSYS_MCU_DRIVER_NO_RETURN
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_KEIL_SIM_M0P)
        #include "mcu\KEIL_SIM_ARM\mcu.h"
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_N32)
        #include "mcu\N32\mcu.h"
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_STM32 || POLSYS_MCU_MODEL == POLSYS_MCU_HAL_PY32)
        #include "mcu\HAL_USP\mcu.h"
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_PY32)
        #include "mcu\PY32\mcu.h"
    #elif (POLSYS_MCU_MODEL == POLSYS_MCU_CMS32F0301)
        #include "mcu\CMS32F0301\mcu.h"
    #else
        #error "Unsupported MCU."
    #endif
#endif

// 由MCU驱动提供给 Polsys 调用的API，MCU驱动必须实现的API。

// 系统时钟初始化
#define _Polsys_ClockInit()     Mcu_Init()

// 启动用于调用 Polsys_Tick() 的定时器
#define _Polsys_TickStart()     Mcu_TickStart()

// 开启总中断
// Polsys_Init 的最后一步
#define Polsys_EnableInt()      Mcu_EnableInt()

// 关闭总中断
// 注意：Polsys内核并未使用，目的是统一接口留给需要的组件使用。
#define Polsys_DisableInt()     Mcu_DisableInt()

#endif

